import extract_msg as em
import os, sys
import glob
from numpy import *
import xlrd
import csv
import xlwt 


path = "C:/Users/guosu/Desktop/python/FOR AM/TRO"

def extract_attachments_from_outlook_items(path=path):
    i = 0
    for root,dirs,files in os.walk(path):
        print("在"+str(root)+"文件夹下有%d个outlook item文件哦"%len(files))
        i +=1
        for file in files:
            try:
                em.Message(os.path.join(root,file)).save(customPath=path+"_SUM/")
            except Exception:
                print("在扫描{}的时候失败了，请手动查看或者联系Justin \n".format(os.path.join(root,file)))
            

def Excel_combiner(path=path+"_SUM/"):
    #下面这些变量需要您根据自己的excel文件column标题具体情况填写 
    Title=['court_order_id','cust_id','linked_by','match','match_type','acct_cre_dt','country','cust_lang_code','tpv','rev','bal','last_pmt_txn_dt','account_type','WAX_DCC','status','restriction_date']
    														
    #在哪里搜索多个表格
    filelocation=path
    #当前文件夹下搜索的文件名后缀 
    fileform="xlsx"
    #将合并后的表格存放到的位置
    #暂时放在一起就行
    filedestination=path
    #合并后的表格命名为file 
    file="SUM"
    #首先查找默认文件夹下有多少文档需要整合
    filearray=[]

    def get_file_by_type(fileform=fileform):
        for filename in glob.glob(filelocation+"*."+fileform):
                print(filelocation+"*."+fileform)
                filearray.append(filename)
        for root, dirs, files in os.walk(filelocation):
            for d in dirs:
                for f in glob.glob(filelocation+d+"/*."+fileform):
                    print(filelocation+d+"/*."+fileform)
                    filearray.append(f)

    '''
    #处理文件名带[SECURE]的问题
    def rename_folder(path):
        for root, dirs, files in os.walk(path):
            print("目标路径下文件夹名称为：",dirs)      #当前路径下所有子目录
            for i in range(len(dirs)):
                print("正在重命名：",os.path.join(path,dirs[i]))
                try:
                    print(os.path.join(path,dirs[i]))
                    new_name = dirs[i].replace('[SECURE]','')
                    print("新名字为",new_name)
                    os.rename(os.path.join(path,dirs[i]), os.path.join(path,new_name))
                except Exception as e:
                    pass
              
    rename_folder(path)    #检测目标文件夹下所有的子文件夹名称，主要为了处理[SECURE]
    '''

    #取到所有的excel格式文件，包括xlsx结尾和xls结尾的：
    get_file_by_type()
    get_file_by_type('xls')
    #以上是从目标文件夹下读取所有excel表格，并将所有的名字存储到列表filearray
    
    print("在默认文件夹下有%d个EXCEL格式文档哦\n"%len(filearray))
    #print("他们是{}".format([i for i in filearray]))
    ge=len(filearray) 
    matrix = [None]*ge 
    #实现读写数据 

    #下面是将所有文件读数据到三维列表cell[][][]中（不包含表头） 
    #处理excel类型的文件
    for i in range(ge):
        fname=filearray[i]
        bk=xlrd.open_workbook(fname)
        try: 
          sh=bk.sheets()[0]
        except: 
          print("在文件%s中没有找到sheet1，读取文件数据失败,要不你换换表格的名字？"%fname)
        
        nrows=sh.nrows
        matrix[i] = [0]*(nrows-1) 

        ncols=sh.ncols
        for m in range(nrows-1): 
              matrix[i][m] = ["0"]*ncols

        colNum = 0
        for j in range(1,nrows):
            for k in range(0, ncols):
                count = 0
                if sh.cell(j,k).value=="":
                    count +=1
                else:
                    count = 0
                if count==0:
                    matrix[i][j-1-colNum][k]=sh.cell(j,k).value
            if count==ncols:
                colNum+=1
            


    #处理csv类型的文件
    excel_len = len(filearray)
    filearray_csv = filearray   #储存csv文件名
    filearray=[]    #清空filearray，把它变成一个暂时的文件名合集
    get_file_by_type('csv')
    print("在默认文件夹下有%d个csv文档哦"%len(filearray)) 
    ge=len(filearray) 
    matrix2 = [None]*ge


    #读取每个文件内容的每行内容
    for i in range(ge):
        fname=filearray[i]

        # 读取每行内容
        with open(fname,'r',encoding='UTF-8') as csvfile:
             bk=csv.reader(csvfile)
             rows = [row for row in bk]
             print("行一共有",rows)
             nrows = len(rows)
             ncols=len(rows[0])

        matrix2[i] = [0]*(nrows-1) 

        for m in range(nrows-1): 
              matrix2[i][m] = ["0"]*ncols 
              
        for j in range(1,nrows): 
              for k in range(0,ncols-1):
                  #print(j,k,rows[j][k])
                  matrix2[i][j-1][k]=rows[j][k]


    #下面是写数据到新的表格SUM.xls中哦 
    
    filename=xlwt.Workbook() 
    sheet=filename.add_sheet("SUM")

    #下面是把表头写上 
    for i in range(0,len(Title)): 
     sheet.write(0,i,Title[i]) 
    #求和前面的文件一共写了多少行
    #把excel的内容复制进去
    zh=1
    for i in range(excel_len): 
     for j in range(len(matrix[i])): 
      for k in range(len(matrix[i][j])): 
       sheet.write(zh,k,matrix[i][j][k]) 
      zh=zh+1

    #把csv的内容复制进去

    for i in range(ge): 
        for j in range(len(matrix2[i])): 
          for k in range(len(matrix2[i][j])): 
           sheet.write(zh,k,matrix2[i][j][k]) 
          zh=zh+1

    filearray.extend(filearray_csv)
    sheet1=filename.add_sheet("Filenames")
    for i in range(len(filearray)): 
       sheet1.write(i,1,filearray[i])
       print(filearray[i])

    print("我已经将%d个文件合并成1个文件，并命名为%s.xls. 敬请审阅"%(excel_len+ge,file)) 
    filename.save(filedestination+file+".xls") 

 
def arrange_file_list(file_path="C:/Users/guosu/Desktop/python/FOR AM/TRO_SUM/"):
  dir_list = os.listdir(file_path)
  if not dir_list:
    return
  else:
    # 注意，这里使用lambda表达式，将文件按照最后修改时间顺序升序排列
    # os.path.getmtime() 函数是获取文件最后修改时间
    # os.path.getctime() 函数是获取文件最后创建时间
    dir_list = sorted(dir_list, key=lambda x: os.path.getmtime(os.path.join(file_path, x)))
    # print(dir_list)
    return dir_list

extract_attachments_from_outlook_items()
Excel_combiner()
arrange_file_list()

